{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def epsilon_similarity_graph(X: np.ndarray, sigma=None, epsilon=0):\n",
    "    \"\"\" X (n x d): coordinates of the n data points in R^d.\n",
    "        sigma (float): width of the kernel\n",
    "        epsilon (float): threshold\n",
    "        Return:\n",
    "        adjacency (n x n ndarray): adjacency matrix of the graph.\n",
    "    \"\"\"\n",
    "    # Your code here\n",
    "    W = np.array([np.sum((X[i] - X)**2, axis = 1) for i in range(X.shape[0])])\n",
    "    typical_dist = np.mean(np.sqrt(W))\n",
    "    # print(np.mean(W))\n",
    "    c = 0.35\n",
    "    if sigma == None:\n",
    "        sigma = typical_dist * c\n",
    "    \n",
    "    mask = W >= epsilon\n",
    "    \n",
    "    adjacency = np.exp(- W / 2.0 / (sigma ** 2))\n",
    "    adjacency[mask] = 0.0\n",
    "    adjacency -= np.diag(np.diag(adjacency))\n",
    "    return adjacency\n",
    "\n",
    "def compute_laplacian(adjacency: np.ndarray, normalize: bool):\n",
    "    \"\"\" Return:\n",
    "        L (n x n ndarray): combinatorial or symmetric normalized Laplacian.\n",
    "    \"\"\"\n",
    "    # Your code here\n",
    "    d = np.sum(adjacency, axis = 1)\n",
    "    d_sqrt = np.sqrt(d)  \n",
    "#     print(\"d_sqrt {}\".format(d_sqrt))\n",
    "    D = np.diag(1 / d_sqrt)\n",
    "    if normalize:\n",
    "        L = np.eye(adjacency.shape[0]) - (adjacency.T / d_sqrt).T / d_sqrt\n",
    "        # L = np.dot(np.dot(D, np.diag(d) - adjacency), D)\n",
    "    else:\n",
    "        L = np.diag(d) - adjacency\n",
    "    return L"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "side_feature_u = np.load(\"side_feature_u_no_whitening.npy\", allow_pickle=True)\n",
    "side_feature_v = np.load(\"side_feature_v_no_whitening.npy\", allow_pickle=True)\n",
    "\n",
    "adjacency_u = epsilon_similarity_graph(side_feature_u,epsilon=1.1)\n",
    "laplacian_u = compute_laplacian(adjacency_u,True)\n",
    "\n",
    "plt.spy(laplacian_u)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.sum(laplacian_u)\n",
    "\n",
    "a = side_feature_u.T.dot(laplacian_u).dot(side_feature_u)\n",
    "\n",
    "np.sum(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "adjacency_v = epsilon_similarity_graph(side_feature_v,epsilon=2.1)\n",
    "laplacian_v = compute_laplacian(adjacency_v,True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1682, 1682)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "laplacian_v.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQoAAAD8CAYAAACPd+p5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO19ffBuV1Xes5qYIFhNQgJGgSZosAVHC7lq8KOjoHzJEDtDZ6DOmCKdjIrUj1qbDDNF7R8t6ghlSlFGosEiHyIqw2BpjFT7RwneixITIOaaUAymJA6IHe0g0d0/3nNu9l33edZa+7zv73ff3/WsmXfec/Zee33ttddae78fx1prWGGFFVaI4O+dbQFWWGGF/Yc1UKywwgoprIFihRVWSGENFCussEIKa6BYYYUVUlgDxQorrJDC3gYKM3uOmd1lZifN7IYtaT3ezN5nZh8xszvN7Aem9kvM7BYzu3t6v3hqNzN77cT7djN72gCv88zs983s3dP9lWZ228TjbWZ2wdR+4XR/cuq/YoDHRWb2DjP76KTT0w9Ilx+a7HWHmb3FzB6xC33M7CYze8DM7ujahuU3s+sm/LvN7Loin5+a7Ha7mf2amV3U9d048bnLzJ7dtYe+yPh0fT9iZs3MLj0Ifab2l0/y3WlmP7mtPhRaa3v3AnAegD8G8EQAFwD4EIAnb0HvcgBPm67/PoA/AvBkAD8J4Iap/QYAr5qunwfgNwEYgGsA3DbA64cB/DKAd0/3bwfwoun6ZwF873T9fQB+drp+EYC3DfC4GcC/nK4vAHDRrnUB8KUA7gXw+Z0e/2IX+gD4JwCeBuCOrm1IfgCXALhner94ur64wOdZAM6frl/V8Xny5GcXArhy8r/zKr7I+EztjwfwXgD/G8ClB6TPtwD4LQAXTveP2VYfOmdnKxgkTvp0AO/t7m8EcOMO6f8GgG8DcBeAy6e2ywHcNV3/HIAXd/in8BK6jwNwK4BnAHj35Ax/1jnmKb0mB3r6dH3+hGcFHl+IzQI2175rXb4UwJ9Mjnv+pM+zd6UPgCucww/JD+DFAH6uaz8NT/Fxff8UwJuZj836VH2R8QHwDgBfDeBjeDhQ7FQfbAL3txK8rfTxr33desxOOsN9U9vWMJXETwVwG4DHttbuB4Dp/TFb8n8NgB8F8LfT/aMB/Hlr7SFC5xSPqf8zE34GTwTwIIBfmLY4P29mj9q1Lq21TwD4aQAfB3D/JN+JA9BnhlH5d+Ej341Ndt85HzN7AYBPtNY+5Lp2rc+TAHzTtN37HTP7moPgs6+Bwkjb1t81N7MvAPCrAH6wtfYXu+RvZs8H8EBr7USRzlIdz8em/Hx9a+2pAP4Sm1JdiraEz3RGcC02ZeuXAHgUgOcGtA5kzgK6W/Ezs1cAeAjAm3fNx8weCeAVAP4d694VnwnOx2arcg2AfwPg7WZmu+azr4HiPmz2dzM8DsCfbkPQzD4PmyDx5tbaO6fmT5rZ5VP/5QAe2IL/NwB4gZl9DMBbsdl+vAbARWZ2PqFzisfU/0UAPlVQ5T4A97XWbpvu34FN4NilLgDwrQDuba092Fr7HIB3Avj6A9BnhlH5F/vIdFD4fADf2ab6e8d8vgybAPuhyR8eB+CDZvbFB6DPfQDe2TbwAWyq2Ut3zifbm5yNFzZR8p7J2POBy1O2oGcA3gTgNa79p3D6AdpPTtffjtMPnD4wyO+b8fBh5q/g9MO/75uuX4bTD//ePkD/fwL4iun6xyY9dqoLgK8DcCeAR05jbwbw8l3pgzP32kPyY3N2ci822fTi6fqSAp/nAPgwgMsc3lNw+uHfPdgc/JV80fNxfR/Dw2cUu9bnewD8xHT9JGy2FbatPmfwPajFvu0Lm9PhP8LmhPYVW9L6RmzKq9sB/MH0eh42e+hbAdw9vV8y4RuA1028/xDAsUF+34yHA8UTAXwAwElsFtl8Ov2I6f7k1P/EAfr/GMDxSZ9fnxxr57oA+HEAHwVwB4Bfmpxua30AvAWbc4/PYZPhXrpEfmzOGE5Or5cU+ZycFtPsBz/b4b9i4nMXgOdWfZHxcf0fw8OBYtf6XADgv05z9EEAz9hWH/ayaeAKK6ywgoR9PaNYYYUV9gjWQLHCCiuksAaKFVZYIYU1UKywwgopHHqgWPSDlBVWWOGswqEGCjM7D5uPhp6LzY9WXmxmT07GXH8Ich04j5XPyueweBwEn8OuKL4WwMnW2j2ttb/G5huM1yZjDsOwhzJ5K5+VzyHx2Dmfww4UB/ZjrxVWWOHg4PwcZaeQ/iBlKpmuB4BHPepRVwPAsWPHTuGcOHECV199dcroxInNb7N63H5sf/2EJzzhNB5LQNH2sC2fiD+w0XcX+lTgIPlE+vi5ZXOtaGWQ6aPmttJ+4sQJarOqT4/CzCeiP9nmz1prl0W0DvWbmWb2dAA/1lp79nR/IwC01v4Dwz927Fg7fvw4zGz+6ik2P4x7GDL5+7H9vafT0/Njer5eDkZbjYnalV6RnB4y2/R8vU37tgivb2c4nl9ke8WTQYWHmlvfz669Xl6WbKwaz2xb9WXlc0y2iEbmSwBOtNaOqU7g8LcevwfgKtv8ndoF2Px46F0Kec4EagKjBQ+Ehol+3xA6W0bX9zPn7nkp2SL8SoCp0FX9kXzRQt4miHudMvv7xc1o9Qskm7Mo4EW6sLnq5fT0GW4U9CuJnPGMxntfr8Chbj1aaw+Z2fdj82875wG4qbV2p8LvyyU1kSpjnfoxS2e4keopW3BLnOogQAUQYFznCHonZ4tuCZ8R+7GMXOVdyKhn0B3VRy1If58FrCqussdoAKjCYZ9RoLX2HgDvqeKrUk7QPu09iuiRs49Ec0YvKlMrZXZGv9qvStmIhpLPZ+6qw1fB01M2YlsX389oV2yt5q0it7JLpfRfYsssIGS6+Mojg0MPFKPgg0MWLPxYdR85eyXTZbSrOOxeleTbbCsiWlE2rIypBrzIubMqocJbbU9H5a9WKNvIXeE1Itc2/lgJFnv9M3MzayprRIdDzHlUVvd0+zGMV9/Gxo3QrrZnNL2urF9VV9XqIMNjNDMd1Dxlh3hLM7CyYZQwMt8b4Q/UKowK7RE5mL86e6eHmXtdUfgzih5YZdEboD+n8OP6997YrHLxAanixNEkqoqILfpZ/qyCinDV4s10YXJVMi3bnnieWfWUBQiVGLJtajbnXh7PV9khGu/bK/OuZB2tVlgy8zJWg92RqCima6psNtHZveB76jrLej1ONAHb8IwqpiodJX8l+0f6RUFUjVF6Mnm8TGoM01/JnwWUbLFmNlI6KntEtEfoKn0Lep3bFcX8zrJSNC4KFlGfmgDGK3KQiHaVZkWGKi12zXiNjK/0RfPGaGRzW6FTqeb8PKuKJ+NfCVq+fUTXrL+qZwXOiZ+Zs/Iww1/SN4KTjem3SGcTdsl/1C6V4Hg2YVs59kWPXcCRChS9U6u9fzSG3e+K/ygvnznm/XJEo+/Pth+Ktw9QWZBVW4eeR3mf2+FX7LcNMNkiXZQcS+a5Yn8vRzb3PY6SKbOfxxmx915vPeZvZs4Q7bnnd7afrSyuGU/tQT1OdB/JyM4DIlkUnuofCVbqbMLrHuk46nhMPsbPQzQvkdxMz4hP1laZa6VbdK7gx0Q4ir4ak81nBfY6UPgfslT2tOrMwmfQaE+nzj8i3EimXvbRvf3ouUDlHKMyPjtjGT0fUMCCOqPDEgDjvXRbyeZHjamedbD2fmw2bxV5q3JsO197v/VQ0dz39W0q6/TXUeZQZSvjqcb4knKb/epISentFW0RMhso21e3PdVyWmXdvtRmi6JCX8nox2c6MfwR/lU/jgJlD5XAWJGlCnsfKGZQC8GDrwYUjcrYPqoruuq+x1fbAi+XgkpmUXoxHaLFweSuQL+gIydWFY8KAEp+zyvSSQW9SEeF73WJ+LPAEtFX8kftCtR2i8lYordNpjtosPWbmSWaXlfWr4Kbos14RXiMZqaDmic2Z1U5RuWP6FV8b4Q/EC/gikxL5IiS23S9dz8zH4L5jGKO3CwDVEtiD56mp1OhNVIiMt4jdKtZJwoemU6VTHtQiaUqG2tnVV+FpqIzMjbjWZnnbL5HYFTuKuz1YaYHVapW8HypupRnpWz34xTOaMlZdWSWvdh7ZX/OaKkxiqaqABWv6txGQZDRUhVOpJeqKCNeI8mM+SnDZeczyp7R/Cu5MtjrigIYLzv7YLBtyZpVMD3d6EAqKzV3AexgbUmWrgSmqJLaJgh4ep7mPB/9GUWF/5KDwAo+4x/xrm7xKu2ZDpUtTlUmYD2jOINuP4bx6tvYuBHa1faMpteV9a9nFOsZBbufrs+N33pEma83GHPMqJRkEJVyldJb9UVbHyVPdaulZFLjK9uIqoxKhkr5G/Up+apyRLJV2lnVksnMaCjZMz2qtEfnpUrfw+Kth5k93szeZ2YfMbM7zewHpvZLzOwWM7t7er94ajcze61tnhB2u5k9rciHlm/Z/lRF277dv/qxShZ2zeT0bd5hWIRX7f0Yxof1KydndvE27Xl4u2Q4HljVwORTtvJjlU49DtMpu67qUxmr7Kyqpcx3GC8WkJVvMJoZrodtzigeAvCvW2v/CMA1AF5mm6d+3QDg1tbaVQBune6BzdPBrppe1wN4fYVJ5DSj4w4Sdskv0y9bkH/XYBvdo4Sza14joLaNI+N6GKHBYHGgaK3d31r74HT9fwF8BJuH+VwL4OYJ7WYA3zFdXwvgTW0D7wdwkZldvlhy7P5wMIvGB82/yvuw+G4LFTkPQhdWTSjIznmy9lGZRmlWthYVv1WBp6rXTj71MLMrADwVwG0AHttau38S7n4Aj5nQdv6UsF1H99E949nILofJd1s4Wxl65FzHL5SRc4wlMo3SrB5WZn2qcqrqtXWgMLMvAPCrAH6wtfYXESppO0NKM7vezI6b2fEHH3ww4z0kawZrRbFbWCuKePzfmYrCzD4PmyDx5tbaO6fmT85biun9gan9PgCP74Y/DsCfepqttTe01o611o5ddtmZTzmbPznI9mLqQKrPNlnmiQ4X5/HR4SOL5l4Ophc79PL9TGemG9OB6eJpeR08XWU/z4/ZR82fOqhkB4OedmQLT7+nx+Tx98qnvC8oO0U6+jlVmb+XU9kuC3pq/iqwzaceBuCNAD7SWvuZrutdAK6brq8D8Btd+3fZBq4B8Jl5i5JBVg6qhRDITvF7R+7bPF50AMbwszGRbgq/WkoudVrlvBH4RceckTk/a/fyZLpV8BnPTD5GV/FX45ksqlLI/IlBtD4yHuVgwZyj8gLwjdhsHW4H8AfT63kAHo3Npx13T++XTPgG4HUA/hjAHwI4VuDR2uaizdC3za8e/Jion70YDuOnZFP0vQyqLWpn/ZFOSiZ2ndmkMj7CieSr2KRix4r8o3r6cVV7R2Mq9qjgRrbw4yN7AjjekrV4JL6ZOV1vBBbvYjwAyCyW8JZZICsPK7IpWSN5M328fIw3ky2zIcPreVSrpRH7RbSiLUDEy4+JfCvj73kxeRjPSM6IpqfLfLPvU/7LbGBH/ZuZPczKKcP1bX7Ss4mPxlZwmEzRvnabBer7exmYzNG2obJYGH92BuFtHfGcoWJrhqt4K9mUfGxBVxe9ou/B04z4+61OZk8VeJnvRfNZgb0OFP6v8HqIMjaLvNVgkfGK6KiKx+Nk1/294hnpwZzc26uSOT2tjL9aFFmVxfC8/L3zK/0i2ZgujC+bh2zuvU0VjYhXLxvrZ0Ey4ufHZNVKBnsdKCKIomJWFmbj/ARWsmzf5p1ajas4PcNhi97Lq+gomRSdyiJmfFW14vkpGXt5ItnVvKpgwHRWNu7v1RxmyUHZQsnJeHuZGV/fXqVfDRZHIlBEUVopGmUIhldx8l1VFFFGYfJn+JkjMr3UguzfPR8WmJhuylZszlhmVAvFy+GzLwvQKmt7WRl9byfWr4IGs0tUJaiEUakc1HWWfJhuCo7EYWa02KJswNrUAvY4ilffxsaN0K62ZzS9rqxfZZ2qs2R4IxVFJF8UwEbkrcof0av43gh/QFeRVZmWyBFVHdP10f4rvBnm6McissdTfQzXv6Lyr7JQFZ7SJ+pXpS7jG1U5c9asQFYxZH1enp63kiGSrR9fkWlJ0uvpRzbOIKqyej7VsUsTeHV+Runv9dajP8yMFgsr4Srlmoes1Iv49dfR2Kxc9PeZ82ZBpOLAbHxUlUUBcsQBlR2V7BXdomCZzesojwxXVbP+ekSXqhy7oN/DuvVwdPsxjFffxsaN0K62ZzS9rqx/3XqsWw92P12fG1uPGSolezVy9rhZNh/N2J62ytgjQVrx9Q4QVRCR7Exnpf82lVCl0lI8vWz+pegr+SO9gDMPxJmMTCaFoyDziRG/VrJU/DaCvd56zKCUYpG0Wml42qxKiej7MUqmkfKzlykrU3snjrJUdgbAsr7XPdJxhJ/CZ7YeyeQjcxbJ7mky/MpcM/49TQX+vKRyvsMCgLJBNC6DvQ4U2Reuona1iLOKhL1X+VSMX8201cy87RmFus6CqoclzqdoVuZ2pC+jG+GM8MrkjuZqpGJYIkeUkCqw91uP0YxVxVuyz1XAMvBB8+x5z7QPgv6oHLuCSB/fl+letc02ONvM+UHMW7VyKtPb9QTvEtbDzPUwM5J9BCIbroeZR/xHYdnf9au9O3D6QRRb1Fn5PI9Te/dKUMkWR7U9K+vVeUUvn+9juvS0WF+lFPY268cp+fycZAEiSwzVLUAva6aTskmVP9ueKjzWp84jFB0/pmojBXsdKAB+yFZZPGyRqknox/ixzFGyysUHKzVOZZdKxRQFsP6aLQ4mk9enX0jKDgqyikIFbkY/mkemb48TyZrp5W3e96mAq+RdKmdF74x/VImOVER7fUZx4sQJmW2AfB87GkX9AvdtM6gKx+NVxlUgmtDeYdSiYjpkMo04kafT88t4R/0VOdi8VuesipPx78eqCjKS86Ah4lvVea8DxQyzw/nAMGIAhutfqkJg4z0/xSfSJ+pn2V3xjTKEL3czuRQdxZtBb7OsPM6qwkr2q8idyernZJRWpXIZGbs0iFTnZ5T+Lv6F+zwz+30ze/d0f6WZ3WabJ4W9zcwumNovnO5PTv1XjPBhDq8WjO8bXSj9mKg0jPaiCrI9KmtneipdmTyVaqoqs79n173NMt5RcFMB1eufBcPI5n7Ola4VH4rGjgRYPzbzE2aLrBIfhV1UFD+AzcN/ZngVgFe3zZPCPg3gpVP7SwF8urX25QBePeGVoLK4ImAO1xs0c7RdZZe5T20TIhqVsnUbHfy+W42NqpvoesSGar6i/iggVSoFX7lEW081XslUGat4RLZTsrEtX+ZPGWz7d/2PA/DtAH5+ujcAzwDwjgnlZpz+pLCbp+t3AHimJRbMvnDFFly/Z/d4fb+iqcZWIrXC73lG2VjRz0p5RacPSox+RJfJH9kl079ixwp9plMkd1U+bz81p0qOil16OfvxbP4r/lSVI2qrwrYVxWsA/CiAv53uHw3gz1trD033/dPATj0pbOr/zIQfAouWHrzC/WSwsZGBRoyn5FIysn3waLaN+FfPLpbsiRWtqiyjEG07VEUR0do1eD/Jsr6/XupnfryiUz1vqdpmm+d6PB/AA621E30zQW2Fvp7uaU8KqwaBbvxpuL1TzfdVYOWbKuk8bYab8coWQESzzxQRnUgXxU+NZf1REGJjIhn9XI8EPKWbktvjqDGKRz//PX7fzvyPjYnkzeaDtUf0qwFrm4riGwC8wMw+BuCt2Gw5XoPNw4fn72f0TwM79aSwqf+LAHzKE23kSWEjC5ApztoqE+BLTU9LGdovWl/+9U7ky02mV3WC1QLs+Xq9epzesb3cnp669uVxhN/r6gO8ks3z8YvQL1glo29XCzgq1T0vHwiYTJHuzBeydgbR1mfmF60hBts8zfzG1trjWmtXAHgRgN9urX0ngPcBeOGEdh1Of1LYddP1Cyf8RfVXZaK3oVvt27Z8BMa2Uv39LvStwlJeFfvswoaKpgqmS+TZ1Vahl2NX9tnGbw+jolDwbwH8sJmdxOYM4o1T+xsBPHpq/2EAN1QJVhSLtiRRlmVZPSp5q+UvKzd9JTES1asOE1UamV59BoyCkbIHq84ifKWfqqBUac9wlLxKf28bv41j1Zqvcvzij2RS/qaqyUpFwsao8aOBb69/FHbs2LF2/PjxEu7IfutsAQseMwxP3IC+yoGr9NiCzPgBB1MtbAv74ieHKUfGy861f7iKYKTMPMyyXcGuS9mDhJGAVGlbQmdXsI0uUXsFdx/8binsdUVh68/My+VrREPpxHRRkOGpg8VIBzVPbM6qcozKH9Gr+N4If+DM6mxE1qVyMH919v67U1GssMIKBwdroFhhhRVS2Ov/o+i/wh2V0ey6B/URUeUEPuMRffzEDpHY6fgSyPhW+rxeajsXfSLEtgrZdbYFyGycHbpGW5wRvSL8qG/0MJf5RLRdYHqptl2di+x1oJihOkGsbWTRR58O+EXEZFDOlskUyZIFlsiBGfSyel2qQSK6zsZHNo7OLNSeXJ2DsHHZXCr79R9DMjoV+2e4yp9Y8GaQBYhojipwJAKFgsqCY6CMXgkqIxXFiEyMhnKubWlHY7OANkJzG9tEto/ojsxZJl9m/xH7VH11RNZR2qyPVSoM1k89HN1+DOPVt7FxI7Sr7RlNryvrXz/1WD/1YPfT9bnx57oAj7TRvm601DM78/cNfRsLFvN4JlO0OCrbherWI8NVizfThcmVJRVms36ckk9VDJFze90UPpNfzbmXx/NVdojG+/bKvCtZo7GKZybjObv1UMr7NhbB+/ueDqtE/L3KkpHTK7pKLsY72pczXK+PCkBMFya3qtiiAKTkZAEkW6Sqz8sR2Y3NmQ8WvTwswDE92Hhmp15PZevIHpkPKF9T/sXmL4N16+Ho9mMYr76NjRuhXW3PaHpdWf+2jpLhZQEmy8wqCEWyj0BkQ0Wv4nsj/IGju/VYv0exwgorpLDXW4/ojIK1V3B8+0hpn/X5tqhcHq3kMhk930qf2lqpbQmjUyl7VZms9MtsnG2nosol0ovZJptL1hdtOSPI/Dc7K2HtURU8UhEdiYoiM3i/T2TKRwuHOYQf59uysr3HYeP7vW1lS8H6R8vvTM5oK+fHRropm0VyRHIxObztVJBTc6r0YnaP8Kv3yvZMTrV9HvFr5ltLtms97HVFEUEle1XuK3T9exV/KU42dr5WlUnUFukS8dtmbDYuwxuZhwh3G519G1voS+a/6luR3CNV7gj9Ho5ERQEsi4jbRNFoLMtwu+I7QmNJZXFQoLJeNmYJLdY/il+RKcrIlUW2C7+oVmCqLRtflenIBApVFqq2JecArAxnQaGP5Gx/2i/gJQtopu3lUniRQ4+Uzn3bqNytnflxYbagvZ0ULY/DeKl9fI9f0ZFVbX5OezqZfn37yBba08h8gLUpnkrGCLZ9rsdFZvYOM/uomX3EzJ5uZpeY2S22eVLYLWZ28YRrZvZa2zwp7HYze1qRh7zPyqlorHIo/14tK3uH9cGkMtkRVM8smGMwHSK6TO5RWSMa1e2MDwo9Tq+rChieFvMbFUAifVhA8/IqPaIKisnj5RiB3heiYHhYFcV/AvDfWmv/EMBXY/PEsBsA3No2Twq7FQ//N+ZzAVw1va4H8Poqk9FSE9CR2AcLn7UUPzY26s/oKFwlr+pXtDO+TBeWaZVdokolks2PZbSjsVF7pFNUeVXnX9FRPlXRI7Jh1UcymRlOBf80mKPY6AvAFwK4F9h8aatrvwvA5dP15QDumq5/DsCLGV7Ao7XNRZuhb5tfPfgxUT97MRzGT8mm6HsZVFvUzvojnZRM7DqzSWV8hBPJV7FJxY4V+Uf19OOq9o7GVOxRwY1s4cdH9gRwvCXrfZuK4okAHgTwC7Z5SPHPm9mjADy2tXY/NlLcD+AxE/6pJ4VN0D9F7BRY9wAg1x6WUDMO66tGTjamtdper6dRzYzVrMP0zLZgfV8mUyQL68uyeG+zjLeyaz9e9av7SP6sDB/J+BEfPzaao0jOSnUSVTQMpyKLh20CxfkAngbg9a21pwL4S8R/wc+0PUPi1j0AaAvZVlhhhR3CNt+juA/Afa2126b7d2ATKD5pZpe31u43s8sBPNDhP74b3z9FjML8zcw5AvaR2b9neD7DZVl4BkbLX/s2lQVVhlRjMpoZDSW7v69mO2bfCs1Mh4x2P2fV7MwgsnFFpwp+RYbMFyq0R+0RzX8FtnlS2P8B8Cdm9hVT0zMBfBinPxHsOpz+pLDvsg1cA+Az8xZlgOdp9+pQx5e73pjRBLF31Rbd+9JxqXMzHlG/LzFZGRrRVSVvNbBkB2bsvp8vthVQi6JCX8nox2c6edrethn/aulf3eZWEkh1a1uBbb+Z+XIAbzazCwDcA+Al2ASft5vZSwF8HMA/m3DfA+B5AE4C+KsJ91Bgm0W6S/BOue2+cRs5oupjdKzCW2E/YNtEBWwZKFprfwCAnSU8k+A2AC/bhl8P1e0DW5wjZb4veyP+Ho9lS5UZVNDwZbmXSck7X3u9lS7MFj7jsrGKL9tO+Mzcy8foM9soW7FqI7J9JCvjreaebYtY5VGVU+nJ9I74RfQra8HDXn8z88SJEwDiU/alpV5f1vYvxkNNpOLrHaGHfgFWJ4npyXioUriig1/IlcDl+1hgyPRUZX20bfIBkMnv+5i8Ea6/r2xXoyARBQImJ9OV9bFxPgB7nGjdKNjrQNFDtlhmHNZXNQobw/bGEd1sQWaZnLUzPbNA2PdVAl1VZn+fZelKgGL8+vGqX91H8mcBV+la8aFo7Oh2LQr+kWwq6VX9RcFe/3rUf+rRgyq7e2ATFC18RafCS+F5efr+fkJHs0ZF7p5vVhVUnLlqu6hMr8oe2XqJo0fjoiQQ+VQmR2T3UR+McEblqNI/jcZSox8G2PpXeCWaXlfWz3RiuigY2bqweVHz6OXzdCLZRyCyoaJX8b0R/gA/cxqRaYkcakvUXZ8bf4U3l6C+FK0uDIXrX2rxs/Gen+IT6RP1q6zM+EZVych+dEnmZ8DK5uo2y/dlFVfftyTp9fSzijGCrFoZ3X7tumrqoboV6uFIbD0YqAwwkSIAACAASURBVJLQO81IyZWN9bw8TqWsVM6o5Kw475IyXcnK+PrFOlLCZ6D0rJTL1QWmKp1IngqPUVtXrzN6FTmy5FKh38O69XB0+zGMV9/Gxo3QrrZnNL2urH/deqxbD3Y/XR/trUd/mNm/elhaLnqank6F1igOK3PZ1iCL/lHmyjJqf694VPVXsHQhL+mPqsgl/lCVx+ONVhmZnEvtH83/NvT3eusxg4rClfJUtWXR3DugqlYifnMQ8A4RVT6MLjtvGdXJ82WlqaqcVGnLrpmcjI/HYRUak8339zw8LSYXy+zRvcL3uig9WOXb81Byej49nrITa2drx9u/Akdi6yH6Tl0zw2QTp2hWSjrlAJUDK1aSM32i7Q7jG9FR8kd0R0vuyF6RTbJtXYX/yJxFsgB59ZX5VsRX+YsKlJWtXkWOgs3OjWePRotRVRRZGVlxapbVs4oiGxNl4IhuVHFEjhVVJksqiiyARXpki5nJxWgpG0eBxF97nzqMikLBQVcUXta+vRrc9/qMYv4Kt4fI+UcNEMHsQIz+LEeF/5JMO9KfOaHqZ+3byM34Rfar0lJzmskf0WWyAnGQ2kaXKih5KtUQozXqSwr2OlDMkFUHGSiH8K9o/Ci/qG/mV8kyvbwZj210UBnbj1WZKbteEiB68MmBLdrKNjXamvT9/r5SBSmZqhWUCnxZoGd8fV+1GlFwJAJFn1nYXq7HU30M17+ibUN1+1KZgGzhsK1F5OzZ1qPqFJVFUVnwvc0i+0XtfnxFpiUZ3m8/PM0qZIt5NIgvrVaq8zNKf68DRfXjUbbQM1AVhd+bMqhMfs8naqsGm0pVlcmdBTu2wCs0dgFLS2QWjLLglNEZGZvxrGwLsvkegVG5q7DXh5kelHFZ9vV4vuSvLARFK8JneD2dUYeK9FTgdWayjfJjVc6orNmiUXPTt6u5q+gZ6awShOI1YtuKTzFbZ8kqsheTudIm+R1UhtgF2PrNzBJNryvrV+cMijbjlR2oeZqZDmqe1DnBiLxV+SN6Fd8b4Q+c+WnLiKxL5WD+6ux9sN/MNLMfMrM7zewOM3uLmT3CzK40s9ts86Swt9nmb/JgZhdO9yen/isy+v1vPVSE9dF6V2Wcyv5VfmxM9bAqkzfLNoxHFDwV72qG9HJF+lTkVvbr3/38qGslo9JLtVWqDXUfVTKKv9I1o+/lVVXHKCwOFGb2pQD+FYBjrbWvBHAegBcBeBWAV7fNk8I+DeCl05CXAvh0a+3LAbx6wisBi8aBXOEpcE9TOUHPLzvkyhY/y5DKsSPIqgdGS2X4qIrx24BIH09DnRX145W9Kjbv+zyvKLsyGSNZvI2YTF5utiCVTFH1yHSPfLrSlwXvCmx7mHk+gM83s/MBPBLA/QCegc1f9wPAzQC+Y7q+drrH1P9MS2qm/q/w1OQyh6pUFczpfJ+ixXiP4LDJrYzJ+Hq6leDC+qMqp6Izg8iOLJhW6TDfiAJBBBUbqzEV/5zB21IF7AhUtTIqdxW2+bv+TwD4aWz+aft+AJ8BcALAn7fWHprQ+qeBnXpS2NT/GQCP9nRNPClshRVWOHuwzdbjYmyqhCsBfAmAR2HzIGIPc8hjIeyM9NG6J4Wda78erdKvnh3sgi7rj+hsu9fNeI/2R2cSS/yhKo/Hi849qmOr4yry7Apvhm22Ht8K4N7W2oOttc8BeCeArwdw0bQVAU5/GtipJ4VN/V8E4FMRA7/1UPsxdp1BdeuR0ViCc1hbjwpd1h/RWbr1yKAqG2vfxdZDnYtUxkU8K/ORzfcIHNTWY5vvUXwcwDVm9kgA/w+bZ3kcB/A+AC8E8Fac+aSw6wD8r6n/t1sS1vqKwh8UqRPfHtThEsPtQR3+qUPV+b6a9Ze0q/4RndT9LrKQP2PI5moes0R21u7nxPOJ+pdWd5ndIv9bwndEjozXcMXCSvDqC8CPA/gogDsA/BKAC7F5yvkHsHki2K8AuHDCfcR0f3Lqf2KBfpuhv+7vAf6I+r6PtSlgdH2bf6mxfry6VvSUPn4s0yGzl6elZB2xQ4SrxkUysnYml8IZlbWCH81BNv/Z2MxW285HYLPjLVmLR+ILV6Lv1HWP038cNL/3eFnmUWN78Dgzvaic63HUtaLftzE9MjpK/oiuOomv0KxCpmeV/8icRbIA/OPRCq8RWzNezJ8zeatyFGx2bvwfBYNs0fd40X0FlENneH6Cor2oklPxjPQYlS1bYIyGwlWLZYbKFiBbKCoosms1rmrXytz7uVI0Il6ZTopuJA9LZj2PkbWw1z8KiyALEr2xqodUzPCji77HqwSyfqyX1dPo+6NF0uOpxZHpEvHsZVUyzTQYTyafx5vlZfZT+nkcJr+Xhc0rs42yF5tvZpcROb0szO5sbKRnj1OpWDzsdUUxQxSl1UJUjubvVXZVUXmbisLTjIJIj8PwVbaJskeWWSpBKAJVpUQZl2W9kYrC20nR9OP6BR35CKuSlO2zisLPYaYz86dITqan7+v5RpWkh72uKOaPR7MFNdrHFsJIGbYtsInLcHYJ2QJcynskQx0EHS//Ej1UkFqShVX1MF9X5NsWpxLcK7DXFUV0RpEZWkXVaNzo1iOrTrJxKrJH1YKXSck7X2eVEbNRT4fxzAJbVJV5fiobV8r1nm9UqXi7RLbMqixm+8i2TBc1Lx4yvVXVyvytYrMI9jpQRFBVcKTcZ8CcQvHPSlA/rlLWj+JXZKvosoS/opmV0ErGTCYVXBUttTgjvdiCzHhVtwhsTCVhRDoyPRmOalNwJD4eZWUgczw2kaqiiLJiFrmzCF2lXW2vZPGIhtKJ6aIgw2M0Mx3UPKmsPiJvVf6IXsX3RvgDcaVUkWmJHFHVMV0f7SeFzTBXAr4iqC4MhetfavGz8Z6f4hPpE/VH2xwVIJQ8VYeuZPRKYultFtkvavfjKzItSXpsG7SEVlYlZUG2Sm+pHD2MbDlmOBKBYnYY7/RRRo3KP0aT7XH7cdWgUJ2obIGw0l3xjZwxC0qer6KjeDPobZYt4iwAVBZaRe5MVj8no7SyQBjpWTmf2FaOHpZUZUciUKywwgpnF/b6MLP6ozB1UKkOgKLSi519sAOnrFwczaBZeyZvhMP6lpTZlazIZFHyLZWdtWdzWjlEZeOiec7sxqrUqt0rc5JVuxGvc3brEZX+bMtQdQy/n/aHRL6sVVsULyvbp6sxSucKfrYtic4JFC7b5mXQn/NUdfd2UrQ8DuNVwfcyVOTzdmH2ysbP7dFWWbUt3Q56+yj86hzvdUUxw0gmyCoGRSOqVhRedB9F+5FsUcFXuKNZJasYsoqqIndW4akqI6r0RvWJ6I/M11LcjFdUzXoaSyolP0elxDVaghwmWPfxqHekLHIrQ7LxPfixfZvC6WVj+ExG1Ra1s/5IJ6UDu85sovSr2MD3efkYbkX3jD6Tf1RPPy6yV8VPmK0Yfs9X4fag7Fexp50rH48CvMyLSrnMQAyUE6qoHZV8CiplX0VPpSuTp5I1RkpbpQOzWcZb2TXKul5/VWJn8nr+0VailHWDsZWEzOSMdGOyzfi+r+ovCvZ669EfZnpgJVlWvqpxinZEqypTRHukvTK5qtJgfZkuHipbD0Uz0yGjHVWIIxDZuKKTb1sihw+iDCo6jtojmv8KHImtx3QdbiGyck2VlYTnVqV5VH4y+SrbFFXWK0eJytDK9kTZL7NDhKvGjcypsq/CGZXV6zyiYyRf5lNqzAj/Cm5/P+u6s62Hmd1kZg+Y2R1d2yVmdottngZ2i23+kRu2gdfa5mlgt5vZ07ox1034d5vZdRlfYFNRRGUv8HBpXYEsSGR9Ee6S0jTiWXXYHn/EyZfyGYVtElFVtl3p4BdTtcKIZBiZ85H+kXHVbVkElTOKXwTwHNd2A4Bb2+ZpYLdO98Dm7/qvml7XA3j9JMwlAF4J4OsAfC2AV87BpQqqHFXQB4Vqmc32lCxzR06UZYaoPGd0fSbyZa/n4cvaOYAwHSK+GU/18jbLeDKbjwSybMug9GQVHrMFk0lVfL2NPS+VpCKfYnSy+VCyMpuPBKM0ULTWfhdn/q1+/9Svm3H608De1Dbwfmz+uv9yAM8GcEtr7VOttU8DuAVnBh/FP7w/qLGjUAlG28hewT9I/Q4bsqpvZG4Po6qpzHkmxy6ruyrfqm2WHmY+trV2/8TofjN7zNR+6mlgE8xPClPtZ4CZXY9NNRICy0QR3iTrosOwnlffprIww2fjRs8D1FmCkpdl5oxuRCvaEyuazA6KX3XPXbHrqHx+rJpbj8/kjqpKxUvppO7VfCh+mc0y2PWnHmyGW9B+ZmNrbwDwBgA4duxYA/Qhlyo5vQGiBeDHRrSYYaN75nTV0k+NUf1MJ+bQGQ8vX7QIRvTp5akuJDVW2TjbMvYyetx+y+DvFXi7KN1UQOx5KdnU/Hn9PN9I1kow9rD0exSfnLYUmN4fmNpPPQ1sgvlJYao9BP9XeH7ieiP3bcz5mIP7l4rg/fgoyve4WfbKJqtavfTXKtAx/RUPlvGU4zIa0cvjM928zP2i7d+Zjf3CYzx9P1uk/l7ZMAp4SqYKL+bjKkArvpHdVTCOYGmgmJ/6BZz5NLDvsg1cA+Az0xblvQCeZWYX2+YQ81lTWwj+r/C8sVnE987ucaIF6heDp9HTYguHBR8fFFSlE9FX1xmdPigx+hFdJn+ka6Z/JIcPnsp+qj+SuypfPz8VPb0cij6zL+MVyTJij+rceL9JoTCZb8HmaeWfw6YyeCk2TyG/FcDd0/slE64BeB2APwbwhwCOdXS+G5unhJ0E8JKKI1199dVtI2KT7x76dkA/ESsDP87TU32KL+OfyapwlD0iPTNdIn6VsRmdiGeEl8letUtFViZXhh/JU/G/Ed5VuSs6O7z0SWHpGUVr7cWi65kEtwF4maBzE4CbMn4rrLDC/sFe/9bjxIkTZ5RJ8zsQf8mI7fX6ezXG47I9HqPj8T1NNa4C0VlGa2eW7n6sOh+IZBo97PK2rvKO+ityROc3FdtvOz/qjMPTzM6ZDhIivlWd9zpQzKAOBqswLyJPMzqo8uNH+UV97NAqo6EcMMKpytTLlfFiZxWV6xEbqvmK+lmQzORi9P2CZwlKjVcyVROUSkBqvJKtH6NwRtfR3v8ozB/a9BBl9opjRhOgTuOVDP1kRzJXZYt4KNn8tecV9Sm5KgFK9SvdmQy+PVpg2aLux2efGHhc5j/Rguz5Mz08LpMjoxnR9ZD5XsQjgiNRUYwAqz5GSlFGy9OsVDhKjmp1VNluZHgZPbY1iOzHaHndIjrRNaMfyRbpFEG2HVJbNxZwqvfZXPULlwVBVfEqv2ZzsnRrN8NeVxQAz+Qqs874amxlgUXVRE/fbx+qOD3vKGMyfVm/55/p5dt6ev27skUFx7dn1U+l0lHZXlUGvd18v79WY3vZIx2ze6WnktNDVGVE+ExnRqcCR+Zn5qTv1LWa8GjiFE01tge1vciqgJ4Hu1b0+zamR0ZHyR/RZU4Z2aVaGmc0M/pLZKvIp4J4ldeIrRkv5s+ZvFU5CjY7N/7hakkE9FksCziRg1WCVQV/7q9UFBGwiifil8nk5coyl+LdZ3x/PZKQ+jFsHGvPgkRFl2xsBop2lUalQqi2j+qZwd5vPWZgEVeVcmysNxQb5ysTP74asCK80XJzvo62HyN8l8qsspyyf1Tm98DaK/NRlT2TP6K57ZxH2ymGF9lSjav6QKX6ieBIVBQAz0xL9myeXt+vJnbUsFmG9/wZqEUX8ajwXdIfVWfRdRYMgXpVlskwIr/CUdVRBZTM86uy7anYlY1TPBVuFLgVrBUFahlsrSjWiiLjEbWtFcUBQv89CiDPopnRvLHUXjiLtpkjK/n6cVkGjKolRrOSvaNF2fdH8qn2JedI2UKqLLSoCqjMj6I/UklUx6k5Ha0OR+RhfHu86rwdmYpihqwkzErWbXixDFktw0dlW1KOVhxvxH4VmWbwgaqif/XQtGK/aMxo9RbxYHOvxlS2jJFtMn9VAXHWuTq+EiyOxMejzKGYQaJM7yevGmU9r76NjRuhXW3PaHpdWb8qPatlaIbHaGY6qHlic1aVY1T+iF7F90b4A7VtUIX2iBzMX529j/bHo/1zPfpXD7PSowc0nqafyEoJWeGXlZWVAODboswYyZSVpX2GqlZsu4Jq9mPtKsMv8YeqPB5vpOoBdFU6yn/puFH6ex0o5n+4UtAHiCy7lsorEqHZQVMliGR8M2euHGZVcGcbKToV/qPQ84t4e1zWN6J7hWZl/AhU51tVJmcDlvDd60Axw+ww3nGi4FDZa/pXtGXJsrHiE+kT9fvsFgWDqJTNqgzPV9FRvBmwymRJheIrvUympVuSeexIcFYyqPaR5LKE/8i4JUFq6QOAfsrMPmqbh/z8mpld1PXdaJsHAN1lZs/u2p8ztZ00sxs8nwjU1qO6J1e4/qXOHdh4z0/xifSJ+r3TRmVx5IyVrOzpjm5fGE/Pu5ppfV9loS3Zanj+S7ceGX4l0B321mN0mw4sfwDQLQC+srX2VQD+CMCNkwBPBvAiAE+ZxvwXMzvPzM7D5i/yngvgyQBePOGG4P8zs4eqc/gAw4JJ5TDIj40mt7r39NfRfttvsaqZuCJbdibBxrLgPaJbZr+l+mXyVWVlMjF8hjNql0inqo9U9fT+VIXKX+H9rpld4dr+e3f7fgAvnK6vBfDW1tpnAdxrZiexeTIYAJxsrd0zCfnWCffDEe/5jELt7/p3j+fbvIF8kIi2HtHZRQ+KtsfxumTtM02F42mwLOn1jHRhfX6Mh76fzQuzi18IHq8fX5WX3TP5K3qpuVS+kvH3Y0e3eN6/2VyyMWwtzDatBotdnFF8N4DfnK63fgBQD31FEWW8/poZbiRyMlrV7KPaK9cj8mYZdwYWOBWfKPtli4nJNaIzW4SRHFkGZRk3k9H3+TbVV7n37Wo7xXxO8WaJksmrZBiFrQKFmb0CwEMA3jw3EbQWtDOa15vZcTM7/uCDD0qDRDCCxyaCZbUMVMarBJKqrIy+b4sWZSUAKfmivm2BOXRUPfmziyw7Vs5pfDBc6muVcZV5WLIdBsa301VYHChs80Ty5wP4zvYw160fANRae0Nr7Vhr7dhll11GI2wnA5Or1OYd0juTLztVCaoCigocipYfW9nm9O/ZAs7sMvNk8lW2Jkw3ZbMRuSpy9HOp+HocRs8vUG+TSHa2uPskVwnuzJ8Ub2WXqt+y6xBYqUIy7RUA7ujun4PN+cJlDu8pAD4E4EIAVwK4B8B52JyF3DO1XTDhPKXAt01B6LTX3Na/93g9+DZFk9FhvNj4pbSr7RnNjIbSKaKtbF7pZ/NSlU/N2ai8VfkjekrmJXJ4W4zy3UaOwvxv/1wPM3sLgG8GcKmZ3Qfgldh8ynEhgFumiPT+1tr3tNbuNLO3YxNEHgLwstba30x0vh+bp4OdB+Cm1tqdGW8PLSnJmsjqqr3Cz4/3tPx936a2AyxrZDRH+tUYVoX4fi8fK+kZjpet103pX9XRy9H39e3smvFncvk+Jgfry6oKRdfbmvFiurK+Kp1y9UBgr3/rcezYsXb8+PEUL9qfjuKP0BrlOwoV+gctwwjsah7Opk5Z4FlKaxfyLMEpjj/av/WIINt/9ngskitgEVzt+XyU9ngj+0O2F2X0WVWQ6VzRRcnK+qK9e6SzHxNl60i2Ct9Iz2h++vvZthHtjKfSK7JNZrdoriJakVwZ7HWgqP7WY4aoTKsYJXPyCizhm9EZoREFjW3ojEAWgBTuEhmicUvHj0B1vpfqdxCwhO9eB4r5exSRYqo6qJwl9LRVwImqDyZXhW82USP9PjMz/mxvH9Fl2X4EmDxLzl162SvjliyA0fnNxu/LNrAKVZvtdaCYK4olk1mN9OqALBun5Krw3fawMjoc3KaiUIdjo7CkIlMZd2TckkW6JAlF489WlbAUqjbb63+48n+F10OlkmBj2acOfmwlC2an+9m4bGz2iYv6VKBa0WR0I5tXz3gYryrNUf6ZbKPzo+zZ08lk9n7Wj1XXI/KqJFddL0MHz/tcKtn6D1clml5X1s90YrooyPAYzUwHNU9szqpyjMof0av43gh/4MwAMSLrUjmYvzp7p5967H1FAdQzCJuMSqZWtCu8qrRVhoroVWkqGtXsVy2xqxlOXVdtHsm6zfnJqO1Vnw+ES2UY5dsDS5RVvhX6Z/A7ChWF6Dt1zRyJRdvMsNHYHrKKRo3pebBrRb9vY3pkdJT8Ed3RTLok01eqtQr/kTmLZAF4BVrhNWJrxktVqJG8VTkKNjs3vkfRK7m07GTZ1r+i8aP8or6Z30hGicp2hVOVqZcr4xVVMdH1iA3VfEX9WZBg14y+ChjVDM9kqoxVPCpVKOPr+zJ/yuBIBAqAn4BnzsTaI2BjosleklkrQa+ip9KVyVPJ9lWZ/T277m1WzeSefrRV8/pngT6yuZ9zpWvFh6KxlUDJ5Ix0Y7L5xMdwluwi9jpQzJ96zKAibn+tFnt/XwUWjRW/yAHZFkHpE7UzvjNkulVsV2lTOF6uSqWRyZpl9SwDL+1n+KqKqdxXfETJpngz+oxGVtVU18ReBwrgTENVy7gel5V23gFYn4rYjJ9auD2dkUzrIQsMkUPN+BGNfr8b6e/lVpk9qzoi/ViAZ/byVUe1clJ6+bnq8VW14Xl7PRhNpbvioaoKVe34aoTZpbqeZtjrQMH+Cq9acmaViHeAyMlHFjVzlh5mWtVytJfV0/E8IkerbAEUHeb8rI8t7EzPbNFG/X07C2wqQUT8q9UMG+9t3AePykLPKiDWx8apyqTnO1pd73Wg6CFbLDMO66saRWU15eyMbrYgK9m1omcWCPu+aqat9mXVwkjlFAVxtUi8/pnjRzbPFpDK2hkfP7aSFJiclWTIbKGCJnAOnlGssMIK+wFHIlD4wxkPqnSLIrE6o6hE/5GyrVJOZhWEb1NjozK1H6fkz+ysZItoVjN9ZvNIHlVmj1SVTOdou+DlirYBbGzvZ0sy/LYwynPvv5nJyrlozxktMraf9Xjs8Cnah/dyeVp+j+73q6OHcEynbPF7efprrxeTj+mZ4TD5lBxMP2+7iIdafEr/bP6UfD2oc5HojILJw+hFYyMfYGcsyu96WtWkt+hJYV3fj5hZM7NLp3szs9fa5mlgt5vZ0zrc68zs7ul1XUk6rJ96eF2UHEwPjx/R6J0p0l853Hyd2SyrZnqcyNH79tGAq/RSC87v+z3/nncWVCPdFQ/W3suvfLIPtlmiyWDpk8JgZo8H8G0APt41PxfAVdPregCvn3Avwea/Nr8OmwcCvdLMLi5JiO0ODVkQYHiRk6sMrGSKHFc5jl/oKtCwCWbyeudjsnnezBaMpwqybGEznkxPj9ePZ3aO7MSCntJFVSrsmrWpYKECWDRWycHszuTMaLFguLOKorX2uwA+RbpeDeBHgdOez3EtgDe1DbwfwEVmdjmAZwO4pbX2qdbap7F5JOEZwYeBj4isYnDynnqPIi3DVxMe0fUOzRYkc2omF9ND6dmPZYuyH8sWB6OrAkAFev5RtooWiqcVyc8CYhS4sjn3fazaYHMf2ZT5BdNd2cfLqoD1RZXryLzOsOiMwsxeAOATrbUPOSF2+qSwEydOyCDBsqSfLB89e/xocarMpCadZSc2OWrSosnM5PW6qkDKghvTRUGG54OVd9TMYVWVxWRnOrH7ivyZXqoijBIRo+FtEfGtzEnmy708KrlVeQELAoWZPRLAKwA8i3WTtha0M/rXY7NtwROe8IQNYlI5+DaVqdQ4RTuiVZUpoj3SXskCrFLJ7FCl7YNglg3ZteKT0faLYklGjPhHdJfOcySDr4Y8VHQctUc0/xVY8vHolwG4EsCHzOxj2Dz164Nm9sU4gCeFVUBl0izSVvpUWTcK0TZoF/QYRI44yqsSWBjdUTmzam9pkMjkYUF2ZHwFt5rFRxb+tvYowxzZohfck8Jc38cAXDpdfzs2Dyw2ANcA+MDUfgmAewFcPL3uBXBJgW9rm4vmAdBPnFpy39NifD0/xl/hZzIwfCUXo6foqL5IXyWH0o+1Kz2Vfp4ekzuip+gr+ZUMSo5M5shPIh2qPqdsV+GZ+fD0fjBPCmutvVGgvwfA8wCcBPBXAF6CjTSfMrN/D+D3JryfaK2xA9JIjlPXrYum/txCjZ3HMFx1EOXHV7NJpWJRB4oz9O2Md6bTiEyVsTOvaF+uDuui8pi1V+ajKnsmf0Rz2zlXZysKL7KlGlf1AXVGUYW9/oerY8eONf9P3NW9mcLLDgd7HEWT4UTOrSZTLYSKvBUHifgyXTwvhte3M5wIGH0mWzSWtVd08jRU8FDyKTmjBRj5n6dXsUcUeCpBKZi/9B+u9jpQ2PrnuiWaXlfWHy2G6jlCtq+uLNpMPrZQt82G0biIXsX3RvgDteqmQntEDhXAuuuj/Vd4/Z/r9q8elgY6T9OX+hW6S3Ey+mqM6u8nfZQu64/oHFRiqWRBNa6Xm71X+Uc2jsZFPCvzkc33CIzKXYW9DhTrIwXHaTD+ozqM4qqxFd5R/8icVWku4TEyvnJGsCveS2EJ373/UZiCKMP05d02ET7afzP6oxVGNDajX7mOzg6y8axqyXRdkgXVNsUD22oy3ksrqpluxV9GfcvbjfFi81aRl9mjOjcj83Ukziima2rM7CBtV+N8mzoPqS5Uxm8GRaNyYKVk8/Qqi5PxZ/qP2lTJV6UTyahoqbOqCq6n6/vYvM+QBdysIh6hq/oUzU7fo/0AoBl8KTm6n42yVA9+EVQWlXJSJVN0oFelWcXJ+ioHaxmekisLMJl8UYCslvFsHv3csDmP6Pb8K9vDStCJcCvzMiJzhS6DvT6j6LcecykWLdKRLNTTYllyZBFmfEbaGb8s4/c0l5beVdzRTF/FyehG8uyiKmZbgYr83ofUNiCite22YHRcNUH0sNeBYoZdOC0Dn/1GF9lBTmbkFDyTxwAABwtJREFUtEuDY5XnrmiO6rkrfiN6jC7gpbBL/9kWsu0Vg70OFKOfevi+6B4406GikrIaebct8WZ5qhWF58H4j+owiqvGVnhH/dH8RnIu0XcpVOe7ul06DBg9AwL2PFDMMDuMd5yRAx2G61/RYVJlj6nwlD5Rf1RRZGcrvq/qFJUFNlqOZ9k9q+KqZyhV2RR/dn4xAkvOKKKxS4NIdX7OqTOKFVZYYT9gDRQrrLBCCnv98Wj/FW7g9JKclbQRXn9gme3R1Ccr2SFitk2JtgFZ+5KDQSW7v19yUp4dzrHr6JObiHY/Z0v210wmRb8yZhs5KofnFdqj9si24hnsdaDwoBZwD9lZw8gE+8noabGJYp9rKxx2nenJ+Cu5FR2li5I10qOHjA7bF6tgruZM2VfhKD2Z3MzGkZ7Ze0RfzQvTSUHGj+Eqm1XgSAWKKEPO4CdmSUWR0eqvK5lTZZFKVh/F7/uiCqxCNwrMB1FRqLmpVBSjeir6lcyr/CKa/+pYbw8FkT2yuYnaFByJQMEMp06TRysKlcVY3wyVrOZxs6ogynaMJ6MR2WZpps30yGRVmU/RZHNRrSgiWFJRZPgjFcUIr4OuKCL9FOx1oOi/R8EMWVlsCnrcrNzseY2CGlNx7ApvFhRHZRnBHaFRrdoqdHchzwh9FdzUOP/u+7PqoNJWgcq4SqLwsPhJYWb2cjO7y8zuNLOf7NpvtM2Twu4ys2d37c+Z2k6a2Q2pZCussMLeQKWi+EUA/xnAm+YGM/sWbB7281Wttc+a2WOm9icDeBGApwD4EgC/ZWZPmoa9Dpsni90H4PfM7F2ttQ9XhIz2ph5vV+3Z2UREQ21zIp4VmqyqUnwrfZX9uzqbyMpmRXtkq6Nky7abfVu2nfH8MztHW84Ih8HInHq6fV+VTrZFiWDpk8K+F8B/bK19dsJ5YGq/FsBbW2ufba3di82f7H7t9DrZWruntfbXAN464YbgfxQm5DvtvlrGVYIOKycrxjbT3/JT1yOwZBuU2SXSVZXTUd+2OkdyzPZlwUrp2S9qhasCSv+KFu6220yvE9OV0WU+6cdtu0Vb+oWrJwH4JjO7zcx+x8y+Zmrf6ZPCgHwPWBmr7kfGZn0V2rviz/CUM+1Spl3TycYsCSoHjTM6dheJYVsY9WUGSw8zz8fm+RzXAPgaAG83sycC8olgLCDRlG7dk8KA+KMnH30dnTMyTZaJWbkaRe3TlHH4XkY1rgLRtis70M0cNaqKRoBl9SrvyC6VYOLHV+esipPx78dGfqHkPGhgfNW2RcHSiuI+AO9sG/gAgL8FcCl2/KSweesRKVLdkkR7cM+jsndXclX4bptJ1aQr/izIRnSjwFQBJs+S86Ve9sq4JQtvdH6z8dvY7WzAQVcUvw7gGQD+h20OKy8A8GcA3gXgl83sZ7A5zLwKwAewqTSuMrMrAXwCmwPPf15hxPaFkQMxXHXf40cHSdkhE6OdHQD24xQPRYf193Qi2XwFotoYP4WX6Vm1o5fRz3VFPgZLbZzhK5sqn6v4SEUfJUffHvH1eBVY9KQwADcBuMk2H5n+NYDr2kaSO83s7QA+DOAhAC9rrf3NROf7AbwXwHkAbmqt3VkRUDmDUl6VVbPDMQNmtHzZ6NsUbY/LJsbjKz1ZiawcjS3UTBdmP8Uz28IomkpHhZfNE5s3pafXh8nf40TzwngonpGPKNso3pEcvt3ronCqweJI/LluZbIm/FP9HY3T2jJn78cwXn0bGzdCu9qe0fS6sv5tHSXDU4E00kHNU7RYR7JgRf6IXsX3RvgDOhBXZVoiRyFQHO0HAK2wwgr7AXv9Fe7oexSq/O7Lrrnc8+P69z4qs21LVLLP45lMURZlJbMqoaOtUQVXZflMFyZXVn0ym/Xjsu0DmxtPm/Vnc+HlV3Pu5fF8lR2y7VDfXpl3JWs0VvHMZKxWRXsdKBgo5X0bK/X6e7Z3zSaCldOR0yu6Si7GO9rDMlyvjwpATBcmt9raRQFIyckCSLZIVZ+XI7IbmzMfLHp5WIBjerDxzE69nsrWkT0yH1C+pvyLzV8G6xmFo9uPYbz6NjZuhHa1PaPpdWX92zpKhpcFmCwzqyAUyT4CkQ0VvYrvjfAHju4ZxV5XFFdffXUpWs+gIj+7Z04clYdZtvNtURWRlZE9rsJnNBVf1s5kjeSLaCua3p6RTdhYNR+MX1a9RfJXqhrmO1nF07dXfSTiG8mt/Ke3I5O1Guz2vaJ4EMBfYvMdjYOESw+Bx8pn5XNYPEb5/IPW2mURwl4HCgAws+NZWXQUeKx8Vj6HxeMg+Kwfj66wwgoprIFihRVWSOEoBIo3nCM8Vj4rn8PisXM+e39GscIKK5x9OAoVxQorrHCWYQ0UK6ywQgproFhhhRVSWAPFCiuskMIaKFZYYYUU/j8l/t8fZjGq1AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.spy(laplacian_v)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "175.2992371569325"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sum(laplacian_v)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "b = side_feature_v.T.dot(laplacian_v).dot(side_feature_v)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2092.570831049698"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sum(b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "side_feature_u_white = np.load(\"side_feature_u_whitening.npy\", allow_pickle=True)\n",
    "side_feature_v_white = np.load(\"side_feature_v_whitening.npy\", allow_pickle=True)\n",
    "\n",
    "adjacency_u_white = epsilon_similarity_graph(side_feature_u_white,epsilon=5.7)\n",
    "laplacian_u_white = compute_laplacian(adjacency_u_white,True)\n",
    "\n",
    "plt.spy(laplacian_u_white)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4396.390374749862"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sum(laplacian_u_white)\n",
    "\n",
    "a = side_feature_u_white.T.dot(laplacian_u_white).dot(side_feature_u_white)\n",
    "\n",
    "np.sum(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "adjacency_v_white = epsilon_similarity_graph(side_feature_v_white,epsilon=52.5)\n",
    "laplacian_v_white = compute_laplacian(adjacency_v_white,True)\n",
    "\n",
    "plt.spy(laplacian_v_white)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "16643.592192322136"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sum(laplacian_v_white)\n",
    "\n",
    "a = side_feature_v_white.T.dot(laplacian_v_white).dot(side_feature_v_white)\n",
    "\n",
    "np.sum(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:.conda-mingbo-env] *",
   "language": "python",
   "name": "conda-env-.conda-mingbo-env-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
